package com.yuw.oop.demo1;

import java.util.Scanner;

public class BubbleSortManager {
	// 属性
	int[] arrSort; // 成员变量（类似于C语言中的全局变量）

	// 行为

	// 数组初始化的行为
	public void doInit() {
		// 局部变量
		Scanner sc = new Scanner(System.in);
		// 输出的长度
		int len = 0;
		do {
			System.out.println("请输入排序数组的长度：");
			len = sc.nextInt();
		} while (len <= 0);
		// 根据长度初始化数组
		arrSort = new int[len];
		// 扩展作业：此处使用foreach结果会是如何？
		for (int i = 0; i < len; i++) {
			System.out.println("排序数组的[" + i + "]的值：");
			int iVal = sc.nextInt();
			// 赋值给数组的元素
			arrSort[i] = iVal;
		}
	}

	// 冒泡排序行为
	/**
	 * 冒泡排序算法[从小到大]--优化
	 * 
	 * @param arr 被排序的数组
	 */
	public void bubbleSort() {
		// 外层for循环：轮数
		for (int i = 0; i < arrSort.length; i++) {
			// 内层for循环：完成两两比较交换
			for (int j = 0; j < arrSort.length - 1 - i; j++) {
				// 两两比较交换，排序规则：从小到大
				if (arrSort[j] < arrSort[j + 1]) {
					// 两个数进行交换
					int temp = arrSort[j];
					arrSort[j] = arrSort[j + 1];
					arrSort[j + 1] = temp;
				}
			}
		}
	}

	// 打印行为
	/**
	 * 打印数组
	 * 
	 * @param arr
	 */
	public void printArr() {
		// 打印数组元素
		for (int i : arrSort) {
			System.out.print("  " + i);
		}
		// 换行
		System.out.println();
	}

	/**
	 * 冒泡排序处理的总方法入口
	 */
	public void doBobbleAll() {
		// 初始化数组的行为
		doInit();
		// 打印行为
		System.out.println("初始化的数组内容：");
		printArr();
		// 排序
		bubbleSort();
		// 打印行为
		System.out.println("冒泡排序之后数组内容：");
		printArr();
	}
}
